<?php

declare (strict_types = 1);

namespace own\helps;

use think\facade\Db;

/**
 * 系统日志
 */
class OwnLogger
{
    /**
     * info
     * @param string $module 日志模块：1默认
     * @param string $param 操作参数
     * @param string $message 日志信息
     * @param string $tag 日志标签
     */
    public static function info(string $module, string $param, string $message, $tag = ''): void
    {
        self::handle('info', $module, $param, $message, $tag);
    }
    /**
     * error
     * @param string $module 日志模块：1默认
     * @param string $param 操作参数
     * @param string $message 日志信息
     * @param string $tag 日志标签
     */
    public static function error(string $module, string $param, string $message, $tag = ''): void
    {
        self::handle('error', $module, $param, $message, $tag);
    }
    /**
     * warning
     * @param string $message 日志信息
     */
    public static function warning(string $message): void
    {
        self::handle('warning', '1', null, $message);
    }
    /**
     * debug
     * @param string $message 日志信息
     * @param string $param 操作参数
     */
    public static function debug(string $message, $param = ''): void
    {
        self::handle('debug', '1', $param, $message);
    }
    /**
     * fatal
     * @param string $message 日志信息
     */
    public static function fatal(string $message, $tag = ''): void
    {
        self::handle('fatal', '1', null, $message, $tag);
    }
    /**
     * 日志记录
     * @param string $level 日志等级：debug、info、warning、error
     * @param string $module 日志模块：1默认
     * @param string $param 操作参数
     * @param string $message 日志信息
     * @param string $tag 日志标签
     * @return void
     */
    private static function handle($level, $module, $param, $message, $tag = ''): void
    {
        $request = request();
        if(is_null($param)) {
            $param = $request->param() ? json_encode($request->param()) : '';
        }
        Db::table('o_system_logger')->insert([
            'module' => $module,
            'level' => $level,
            'param' => $param,
            'message' => $message,
            'tag' => $tag,
            'router' => $request->baseUrl(),
            'method' => $request->method(),
            'uid' => $request->uid ?? 0,
            'port' => $request->port ?? 2,
            'created_at' => now_date(),
            'time_stamp' => time()
        ]);
    }
    /**
     * 其他日志记录
     * @param string $level 日志等级：debug、info、warning、error
     * @param string $module 日志模块：1默认
     * @param string $param 操作参数
     * @param string $message 日志信息
     * @param string $router 请求路由
     * @param integer $port 端口：1管理端 2客户端
     * @return void
     */
    public static function other($level, $module, $param, $message, $router = '', $port = 1): void
    {
        Db::table('o_system_logger')->insert([
            'module' => $module,
            'level' => $level,
            'param' => $param,
            'message' => $message,
            'tag' => '',
            'router' => $router,
            'method' =>  '',
            'uid' => 0,
            'port' => $port,
            'created_at' => now_date(),
            'time_stamp' => time()
        ]);
    } 
}